package com.tianji.promotion.lock;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DistributeLock {

    /**
     * 锁的名称
     * */
    String lockName();

    /**
     * 等待时间
     * */
    long waitTime() default 0;

    /**
     * 锁的有效期
     * 默认是-1，代表不设置有效期，启用看门狗
     * */
    long leaseTime() default -1;

    /**
     * 时间单位
     * */
    TimeUnit timeUnit() default TimeUnit.SECONDS;


    /**
     * 锁的类型
     * */
    LockType lockType() default LockType.RE_ENTRANT_LOCK;

    /**
     * 获取锁的方式和异常处理的策略
     * */
    MyLockStrategy lockStrategy() default MyLockStrategy.FAIL_AFTER_RETRY_TIMEOUT;
}
